package leetCode.offer09;

import java.util.Stack;

/**
 * 使用两个栈实现队列 <br>
 * 队列的特性： 先进先出
 * 栈的特性是： 先进后出
 *<br>
 * 问题描述：<br>
 * 用两个栈实现一个队列，队列的声明如下，请实现它的两个函数appendTail和deleteHead，<br>
 * 分别完成在队列尾部插入整数和在队列头部删除整数的功能，若队列中没有元素deleteHead返回-1
 */
public class CQueueV1 implements CQueue {

    Stack<Integer> stack1;
    Stack<Integer> stack2;

    public CQueueV1(){
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    @Override
    public void appendTail(int value) {
        stack1.push(value);
    }

    @Override
    public int deleteHead() {
        //将stack1的数按照栈的顺序取出，放入stack2
        while (stack1.size()>0){
            stack2.push(stack1.pop());
        }
        int n = -1;
        // 此时stack2的pop就是取出最开始放入的元素
        if(stack2.size()>0)
            n = stack2.pop();
        // 将stack2剩余的数存入stack1
        while (stack2.size()>0){
            stack1.push(stack2.pop());
        }
        return n;
    }

}
